GitHub强制要求开启两步验证了,但是1password要收费,怎么办?

您所在的位置:网站首页 1password 迁移 GitHub强制要求开启两步验证了,但是1password要收费,怎么办?

GitHub强制要求开启两步验证了,但是1password要收费,怎么办?

2023-03-26 12:10| 来源: 网络整理| 查看: 265

今早收到邮件,GitHub要求用户强制开启两步验证:

打开GitHub的设置,却发现推荐的两步验证方法要求下载1Password/Authy/Microsoft Authenticator等APP。

可是1password是个收费软件,而且还不便宜。

第二个通过手机短信验证码的方式,还不支持中国大陆的手机号:Countries where SMS authentication is supported - GitHub Docs

怎么办呢?

自己动手,丰衣足食!

首先看看这种验证机制的原理。

基于时间的一次性密码(time-based one-time password, TOTP)的原理

基于时间的一次性密码(Time-based One-Time Password,TOTP)是一种双因素身份验证(2FA)方法,它根据共享的密钥和当前时间生成唯一的临时密码。TOTP通常用作在线账户的额外安全层,帮助防止未经授权的访问。TOTP是一种在RFC 6238下标准化的算法。

以下是TOTP工作原理的简要概述:

密钥生成:在为帐户设置TOTP时,将生成一个唯一的密钥。该密钥在用户设备(通常是智能手机)和认证服务器之间共享。密钥通常表示为二维码,以便轻松设置。时间同步:用户设备和认证服务器需要同步到相同的时间源。TOTP算法依赖于当前时间来生成一次性密码。OTP生成:TOTP算法将密钥和当前时间结合起来,应用加密哈希函数(例如SHA-1、SHA-256或SHA-512)生成一次性密码。此密码通常包含6-8位数字,并具有有限的有效期,例如30或60秒。OTP验证:当用户尝试登录时,他们输入常规密码以及由TOTP应用程序或设备生成的一次性密码。然后,认证服务器根据共享密钥和当前时间独立生成预期的OTP。如果用户输入的OTP与服务器生成的OTP匹配,则授权访问。

由于一次性密码经常更改(每30或60秒),即使攻击者设法截获有效的OTP,他们也只有非常有限的时间窗口来使用它。这为认证过程增加了额外的安全层,使未经授权的用户更难以访问帐户。

简单来说,TOTP就是在用户和系统之间共享密钥,并同步时间,然后计算一个基于时间的函数,验证双方得到的结果是否一致。

使用Python代码来实现自己的TOTP计算器

要使用 Python 计算 TOTP,可以使用 pyotp 库。首先使用 pip 安装库:pip install pyotp

安装库后,可以使用以下示例生成和验证 TOTP 代码:

import pyotp import time # 生成一个密钥(base32 编码) secret_key = pyotp.random_base32() # 使用密钥和时间间隔(默认为 30 秒)创建一个 TOTP 对象 totp = pyotp.TOTP(secret_key) # 生成当前的 OTP current_otp = totp.now() print(f"当前 OTP: {current_otp}") # 验证 OTP(为演示目的,我们使用刚生成的 OTP) is_valid = totp.verify(current_otp) print(f"OTP 是否有效? {is_valid}") # 为了演示 OTP 有效性窗口,等待下一个时间间隔 time.sleep(31) # 再次尝试验证 OTP(由于时间窗口已过,应该无效) is_valid = totp.verify(current_otp) print(f"OTP 仍然有效吗? {is_valid}")

此示例生成一个随机密钥,创建一个 TOTP 对象,生成当前的 OTP 并验证它。验证分两次进行:一次是立即进行,一次是在时间间隔过后进行,以演示 OTP 的有效性窗口。

请注意,在现实世界的情况下,在设置过程中,密钥将在用户设备和认证服务器之间共享,服务器将独立生成 OTP 以进行验证。所以,如果你想自己从密钥生成TOTP,只需要:

import pyotp secret_key = 'whatever_your_key_is' print(pyotp.TOTP(secret_key).now())

有关更多信息和高级用法,请参阅 pyotp 文档:https://github.com/pyauth/pyotp

Chrome插件

如果你不想用Python来自己计算,也可以使用一些第三方的插件。在这里我推荐一个叫做Authenticator的插件,它不会联网,不上传用户的数据,只是静静地为你计算TOTP验证码。

传送地址:https://chrome.google.com/webstore/detail/authenticator/bhghoamapcdpbohphigoooaddinpkbai/

使用方式很简单,只需要在安装好了之后点击扫描二维码,然后用鼠标选取二维码区域,就可以啦。

GPT-4使用声明

“使用Python代码来实现自己的TOTP计算器”的部分由GPT-4完成,提问过程见下图。

这个过程中,我提了四个问题:

Can you tell me what is "time-based one-time password (TOTP)" and how it works?How to calculate TOTP using python?

请把第一个回答翻译成中文。请将第二份回答翻译成中文,代码应该保持英文,但是要为每一行代码加上中文注释。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3